#include <stdio.h>
#include<stdlib.h>
//struct ListNode
//        {
//      int val;
//     struct ListNode *next;
// };
//struct ListNode* removeElements(struct ListNode* head, int val)
//{
//    if(head==NULL)//为空的情况
//    {
//        return NULL;
//    }
//    struct ListNode*cur=head;//找vale值
//    while(cur->next)
//    {
//        if(cur->next->val==val)//需要删除的值
//        {
//            struct ListNode*newnode=cur->next;
//            cur->next=newnode->next;
//            free(newnode);
//        }
//        else
//        {
//            cur=cur->next;
//        }
//    }
//        if(head->val==val)
//    {
//        struct ListNode* node = head;
//        head = head->next;
//        free(node);
//        return head;
//    }
//    else
//    {
//        return head;
//    }
//
//}

//struct ListNode* removeElements(struct ListNode* head, int val)
//{
//    struct ListNode*cur=head;
//    struct ListNode*list=NULL;  struct ListNode*tail=NULL;
//    while(cur)
//    {
//        struct ListNode*next=cur->next;
//      if(cur->val==val)
//      {
//         free(cur);
//      }
//      else
//      {
//          if(list==NULL)
//          {
//              list=cur;
//              tail=list;
//          }
//          else
//          {
//            tail->next=cur;
//          }
//      }
//      cur=next;
//    }
//   return list;
//}
//
//
//void print(struct ListNode* phead)
//{
//    struct ListNode*cur=phead;
//    while(cur)
//    {
//        printf("%d->",cur->val);
//        cur=cur->next;
//    }
//    printf("NULL\n");
//}

struct ListNode {
    int val;
    struct ListNode *next;
};


struct ListNode* middleNode(struct ListNode* head)
{
    if(head==NULL)
        return NULL;
    struct ListNode*fast=head;
    struct ListNode*slow=head;

    while(fast->next)
    {
        if(fast->next->next)
            fast=fast->next->next;
        slow=slow->next;
    }
    if(fast->next==NULL)
        return slow;
    else
        return slow->next;
}

int main()
{
    struct ListNode*phead=NULL;
    struct ListNode*n1= (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode*n2= (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode*n3= (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode*n4= (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode*n5= (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode*n6= (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode*n7= (struct ListNode*)malloc(sizeof(struct ListNode));

    phead=n1;
    n1->val=1;
    n2->val=2;
    n3->val=3;
    n4->val=4;
    n4->val=5;
    n5->val=6;



    n1->next=n2;
    n2->next=n3;
    n3->next=n4;
    n4->next=n5;
    n5->next=NULL;

    struct ListNode*ret=middleNode(phead);
    //print(ret);
    return 0;
}